package site.ycsyxt.util;

import java.io.UnsupportedEncodingException;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.codec.net.URLCodec;

/**
 * 加密解密，编码解码工具类
 *
 * @author ycs(15241496739 @ 163.com)
 * @date 2022/1/3
 **/
public class CodeCUtils {

    public static final String CHARSET = "utf-8";

    private static final Base64 base64 = new Base64();

    private static final URLCodec urlCodec = new URLCodec();

    /**
     * 使用base64加密
     *
     * @param data
     * @return
     */
    public static String encodeByBase64(byte[] data) {
        return base64.encodeAsString(data);
    }

    /**
     * 使用base64解密
     *
     * @param str
     * @return
     */
    public static byte[] decodeByBase64(String str) {
        return base64.decode(str);
    }

    /**
     * 使用md5加密
     *
     * @param data
     * @return
     */
    public static String encodeByMd5(String data) {
        return DigestUtils.md5Hex(data);
    }

    /**
     * 使用sha1加密
     *
     * @param data
     * @return
     */
    public static String encodeBySha1(byte[] data) {
        return DigestUtils.sha1Hex(data);
    }

    /**
     * url链接编码
     *
     * @param url
     * @return
     */
    public static String encodeUrl(String url) {
//         * 在因特网上传送URL，只能采用ASCII字符集
//         * 也就是说URL只能使用英文字母、阿拉伯数字和某些标点符号，不能使用其他文字和符号
//         * 中文需要经过编码才可以用于URL
        try {
            return urlCodec.encode(url, CHARSET);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("URL链接编码失败！url = " + url + "\n" + e);
        }
    }

    /**
     * url链接解码
     *
     * @param url
     * @return
     */
    public static String decodeUrl(String url) {
        // 主要解码编码之后的中文
        try {
            return urlCodec.decode(url, CHARSET);
        } catch (Exception e) {
            throw new RuntimeException("URL链接解码失败！url = " + url + "\n" + e);
        }
    }
}

